#define _CRT_SECURE_NO_WARNINGS
#include"StrClass.h"
/*
浅拷贝（默认拷贝函数）：将原对象或原数组的引用直接赋给新对象，新数组，新对象/新数组只是原对象的一个引用。

深拷贝：创建一个新的对象和数组，将原对象的各项属性的“值”（数组的所有元素）拷贝过来，是“值”而不是引用

深拷贝会在堆内存中另外申请空间来储存数据，从而解决了指针悬挂问题。当数据成员中有指针时，必须要用深拷贝

1）如果拷贝的对象里的元素只有值，没有引用，那么深拷贝与浅拷贝是相同的。

都会对原有对象复制一份，产生一个新对象，对新对象里的值进行修改不会影响原有对象，新对象与原对象完全分离开。

（2）如果拷贝的对象里的元素包含引用（像一个列表中储存着另一个列表，存的就是另一个列表的引用），那么浅拷贝和深拷贝是不同的。
*/

//void stackInstantiation()
//{
//    Array arr1(5);
//    Array arr2 = arr1;//浅拷贝
//    arr2.setCount(5);
//    Array arr3(arr2);
//    arr1.printAddress();
//    arr2.printAddress();
//    arr3.printAddress();//只有值，而没有指针，浅拷贝和深拷贝一样的
//}
//
//void stackInstantiation1()
//{
//    Array1 arr1(5);
//    Array1 arr2 = arr1;//深拷贝
//    arr1.printAddress();
//    arr2.printAddress();//存在数组，浅拷贝就不行了
//}
//
//int main()
//{   
//    stackInstantiation();
//    stackInstantiation1();
//    return 0;
//}


void test01() {
	//char str [] = {'a','b','c','\0'};
	Str s0;
	s0.PrtArr();
	Str s1("abc");
	s1.PrtArr();
	Str s2 = s1;
	Str s3(s2);
	s2.PrtArr();
	s3.PrtArr();
	Str s4(6,'6');
	s4.PrtArr();
}

int main() {
	test01();
	return 0;
}